/*
 * @Author: Damon Liu
 * @Date: 2024-11-21 11:36:01
 * @LastEditors: Damon Liu
 * @LastEditTime: 2025-04-28 17:02:27
 * @Description: 使用 electron-store 进行数据持久化存储的配置文件
 */

// 导入必要的模块
const { app } = require('electron');
import Store from 'electron-store';
import { mkdirSync, existsSync } from 'node:fs';
import path from 'node:path'

// 获取 Vite 开发服务器的 URL
export const VITE_DEV_SERVER_URL = process.env['VITE_DEV_SERVER_URL']

// 根据运行环境确定存储路径
// 开发环境：使用项目目录下的 store 文件夹
// 生产环境：使用应用安装目录下的 store 文件夹
const storePath = VITE_DEV_SERVER_URL ?  path.join(__dirname, 'store') : path.join(app.getPath('exe'), '../store')

// 如果存储目录不存在，则创建它
if(!existsSync(storePath)) {
    mkdirSync(storePath)
}

// 定义数据存储的 schema，用于验证和类型检查
const schema = {
    // 日程列表数组
    scheduleList: {
        type: 'array',
        items: {
            type: 'object',
            required: ['id', 'title', 'start', 'end'], // 必填字段
            properties: {
                id: {
                    type: 'string'  // 日程唯一标识
                },
                title: {
                    type: 'string',
                    default: ''  // 日程标题
                },
                start: {
                    type: 'string',
                    default: ''  // 开始时间
                },
                end: {
                    type: 'string',
                    default: ''  // 结束时间
                },
                type: {
                    type: 'string',
                    enum: ['important', 'normal', 'minor', 'meeting', 'work', 'study', 'exercise', 'entertainment', 'shopping'],
                    default: 'normal'  // 日程类型
                },
                reminder: {
                    type: 'string',
                    default: ''  // 提醒时间
                },
                description: {
                    type: 'string',
                    default: ''  // 日程描述
                },
                allDay: {
                    type: 'boolean',
                    default: false  // 是否全天事件
                },
                repeatType: {
                    type: 'string',
                    enum: ['none', 'daily', 'weekly', 'monthly', 'custom'],
                    default: 'none'  // 重复类型
                },
                repeatInterval: {
                    type: 'number',
                    default: 1  // 重复间隔
                },
                repeatDays: {
                    type: 'array',
                    items: { type: 'number' },
                    default: []  // 重复的日期
                },
                repeatEnd: {
                    type: 'string',
                    default: ''  // 重复结束时间
                }
            }
        },
        default: []  // 默认空数组
    },
    // 开发者工具开关设置
    isOpenDevtools: {
        type: 'boolean',
        default: false  // 默认不打开开发者工具
    }
}

// 创建 Store 实例
const store = new Store({ 
    schema,
    name: 'my-config',  // 配置文件名（不含扩展名）
    cwd: storePath  // 配置文件存储路径
});

// 初始化渲染进程
Store.initRenderer();

export default store;
